Skip to content

refactor: remove multi-runtime support and storage abstraction#461

Merged
FL4TLiN3 merged 14 commits intomainfrom
refactor/remove-multi-runtime-docs-e2e
Feb 6, 2026
Merged

refactor: remove multi-runtime support and storage abstraction#461
FL4TLiN3 merged 14 commits intomainfrom
refactor/remove-multi-runtime-docs-e2e

Conversation

@FL4TLiN3
Copy link
Contributor

@FL4TLiN3 FL4TLiN3 commented Feb 6, 2026

Summary

  • Remove multi-runtime support (Docker, Cursor, Claude Code, Gemini adapters) — only local runtime remains
  • Remove storage abstraction layer (Storage interface, S3/R2/S3-compatible backends) — CLI uses filesystem helpers directly
  • Remove dead runtime field from Checkpoint schema and RuntimeEvent payloads
  • Delete 11 packages: 6 runtime adapters + runner, 3 cloud storage backends, adapter-base
  • Sweep dead code, fix stale documentation, and clean up unused exports across the monorepo

286 files changed, 711 insertions, 23,589 deletions

Changes

Core (@perstack/core)

  • Remove adapter registry, adapter types, and storage schema
  • Remove RuntimeName type and schema (was always "local")
  • Remove runtime field from Checkpoint metadata and initializeRuntime event
  • Clean up index.ts exports

Runtime (@perstack/runtime)

  • Remove PerstackAdapter class and adapter registration
  • Remove 10+ dead helper exports
  • Rewrite README with accurate state machine, events, and types

CLI (apps/perstack)

  • Replace dispatchToRuntime with direct run() calls
  • Remove --runtime, --workspace, --volume, --env CLI options
  • Fix timeout help text (60000 → 300000)

Filesystem Storage (@perstack/filesystem-storage)

  • Remove FileSystemStorage class wrapper
  • Unexport internal-only getEventsByRun function

Deleted Packages

  • @perstack/docker, @perstack/cursor, @perstack/claude-code, @perstack/gemini
  • @perstack/adapter-base, @perstack/runner
  • @perstack/s3-storage, @perstack/r2-storage, @perstack/s3-compatible-storage

Other

  • Fix React README (remove deleted useEventStream docs)
  • Fix Ollama README URL (ollama.aiollama.com)
  • Clean up knip.json stale ignores
  • Remove codecov.yml, simplify SECURITY.md

Test plan

  • pnpm build — all 16 packages pass
  • pnpm typecheck — all 16 packages pass
  • pnpm test — 101 test files, 1101 tests pass
  • pnpm test:e2e — 21 test files, 91 tests pass
  • pnpm check-deps — no unused files/exports
  • pnpm check-format — no formatting issues

🤖 Generated with Claude Code

FL4TLiN3 and others added 14 commits February 5, 2026 07:06
Remove documentation and e2e tests for features being deprecated:
- Multi-runtime support (Docker, Cursor, Claude Code, Gemini)
- Storage backend abstraction

Deleted files:
- docs/using-experts/multi-runtime.md
- docs/operating-experts/storage-backends.md
- e2e/perstack-cli/runtime-selection.test.ts
- e2e/perstack-cli/docker-security.test.ts
- e2e/perstack-cli/docker-attack-scenarios.test.ts
- e2e/perstack-runtime/storage-behavior.test.ts
- e2e/experts/docker-security.toml
- e2e/experts/docker-attack-scenarios.toml

Modified docs to remove Docker runtime references while keeping
generic container terminology for deployment guidance.

Removed --runtime flags from e2e tests and runtime availability
checks from prerequisites.

This is phase 1 of the cleanup - implementation changes will follow.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit removes support for multiple runtimes and the storage
abstraction layer, simplifying Perstack to only use local runtime.

Deleted packages (11):
- @perstack/docker
- @perstack/cursor
- @perstack/claude-code
- @perstack/gemini
- @perstack/adapter-base
- @perstack/runner
- @perstack/s3-storage
- @perstack/r2-storage
- @perstack/s3-compatible-storage
- @perstack/mock

Key changes:
- core: Remove adapter registry, types, and Storage interface
- core: Simplify RuntimeName to only "local"
- core: Remove runtime/workspace/volume/env CLI options
- runtime: Remove PerstackAdapter, call run() directly
- CLI: Remove runtime-dispatcher, call perstackRun() directly
- filesystem-storage: Remove FileSystemStorage class, keep helpers
- TUI: Remove Docker/multi-runtime UI rendering

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Delete apps/e2e-mcp-server
- Delete apps/create-expert
- Delete .agent directory
- Delete .cursorrules
- Move packages/storages/filesystem/ to packages/filesystem/

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Delete codecov.yml
- Rewrite SECURITY.md to reflect current architecture (no Docker runtime)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The lazy-init tests referenced the removed apps/e2e-mcp-server package.
Replace with a lightweight NDJSON-based MCP server script in e2e/fixtures.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…e removal

Remove dead constants, event types, unreachable code paths, and unused files
left over from the multi-runtime/storage refactor. Fix stale references in
READMEs, docs, benchmarks, and test files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Delete dead TUI components: progress UI, useErrorHandler, useInputState, barrel files
- Remove dead functions from run-manager.ts (getMostRecentRunId, getRunsByJobId, etc.)
- Remove useEventStream hook and its tests from @perstack/react
- Remove SelectableList and TextInput from @perstack/tui-components
- Remove dead exports from @perstack/runtime (getModel, buildDelegateToState, etc.)
- Remove dead exports from @perstack/filesystem-storage (storeRunSetting, getEventsByRun, etc.)
- Remove hasCustomProviderSkills duplicate from @perstack/core
- Deduplicate isPrivateOrLocalIP and filter/formatter constants
- Fix all provider READMEs: wrong interface names, missing providerName, reasoning example
- Fix docs: event types (finishRun→completeRun), staging URLs, roadmap status
- Fix runtime README: state machine diagram, events list, checkpoint statuses
- Fix timeout help text (60000→300000) and stale test mocks
- Move react from dependencies to peerDependencies in @perstack/react

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…Event

The `runtime` field was a leftover from multi-runtime support. After the
refactor to local-only, `RuntimeName` is always "local" and no code reads
the field. Remove it from:

- Checkpoint.metadata.runtime
- RuntimeEventPayloads.initializeRuntime.runtime
- createNormalizedCheckpoint params
- createRuntimeInitEvent params
- RuntimeName type export (now unused)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Delete unused runtime-name.ts (no consumers after runtime field removal)
- Unexport getEventsByRun (only used internally in filesystem package)
- Remove stale ts-dedent and perstack from knip ignore lists

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@FL4TLiN3 FL4TLiN3 enabled auto-merge (squash) February 6, 2026 10:49
@FL4TLiN3 FL4TLiN3 merged commit 607ab43 into main Feb 6, 2026
9 checks passed
@FL4TLiN3 FL4TLiN3 deleted the refactor/remove-multi-runtime-docs-e2e branch February 25, 2026 13:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant